'use strict';

import { Service } from 'egg';
import {join} from 'path'
export default class ResourceService extends Service{
    /**
     * 分页查询所有资源
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object} data 查询返回结果
     * {Object[]} data.data_info 产品列表
     * {String} data.data_info.product_id 产品ID 
     * {String} data.data_info.product_name 产品名称
     * {String} data.data_info.sort 产品排序
     * {String} data.data_info.create_time 创建时间
     * {String} data.data_info.category_name 产品类型名称
     * {String} data.data_info.sub_name 产品子类型名称
     * {String} data.data_info.sub_id 产品子类型Id
     * {String} data.data_info.category_id 产品类型ID
     * 过程：
     *  构建分页查询条件
     *  分页查询数据，分页结果处理逻辑，返回结果
     */
    async find_and_count_all(condition,order_condition,page){
        const {ctx,app}=this;
        try {
            let page_param=ctx.helper.page_param(page);
            let result=await app.model.Resource.findAndCountAll({
                where:condition,
                order:order_condition,
                limit:page_param.page_size,
                offset:page_param.offset
            });
            result=JSON.parse(JSON.stringify(result));
            let len=result.rows.length;

            for(let i=0;i<len;i++){
                let resource_info:any=result.rows[i];
                resource_info=this.get_parent(resource_info);
                resource_info['create_time']=ctx.helper.date_format(resource_info['create_time'],"yyyy-MM-dd hh:mm:ss")
            }
            return ctx.helper.success_result("操作成功",ctx.helper.page_result(result,page_param.page_size))
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    /**
     * 
     * @param condition 
     * @param order_condition 
     * @param model_name 
     * 过程：
     * 获取所属父类，如产品，解决方案，技术支持等
     */
    async get_parent(resource_info){
        const {app}=this;
        if(resource_info['type']=='1'){
            let product=await app.model.Product.findByPk(resource_info['parent_id']);
            resource_info['parent_name']=product?product['product_name']:''
        }
        if(resource_info['type']=='2'){
            let solution=await app.model.Solution.findByPk(resource_info['parent_id']);
            resource_info['parent_name']=solution?solution['solution_name']:''
        }
        if(resource_info['type']=='3'){
            let service=await app.model.Service.findByPk(resource_info['parent_id']);
            resource_info['parent_name']=service?service['service_name']:''
        }
        return resource_info
    }
     /**
     * 
     * @param condition 
     * @param order_condition 
     * @param model_name 
     * 过程：
     * 查询所有资源数据返回结果
     */
    async find_all(condition,order_condition,model_name){
        const {ctx,app}=this;
        try {
            let result=await app.model[model_name].findAll({
                where:condition,
                order:order_condition,
            });
            return ctx.helper.success_result("操作成功",result)
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    //根据访问资源路径获取资源文件所在文件夹路径
    get_origin_url(resource){
        const {app} = this;
        let origin_url=resource ? resource['resource_url'] : '';
        if(origin_url.indexOf("public")>-1){
            origin_url=origin_url.split('/public/')[1];
        }
        return join(app.baseDir,'app/public',origin_url);
    }
}